package Parking;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.Date;
public class CarArray implements  Cardao{

	ArrayList<Car>  carlist=new  ArrayList<>();

	@Override
	public void goin(Car c) {
		LocalDate date= LocalDate.now();
		Date Da=new Date();
		time T=new time((date.getYear()),date.getMonthValue(),date.getDayOfMonth(),Da.getHours(),Da.getMinutes(),Da);
		c.setIntime(T);
		carlist.add(c);
		
	}

	@Override
	public Car goout(Car c) {
		// TODO 自动生成的方法存根
		int sort=0;
		for(int i=0;i<carlist.size();i++) {
			if(carlist.get(i).getCardnum().equals(c.getCardnum())) {
				sort=i;
				break;
			}
		}
		Car ca=carlist.remove(sort);
		LocalDate date= LocalDate.now();
		Date Da=new Date();
		time T=new time((date.getYear()),date.getMonthValue(),date.getDayOfMonth(),Da.getHours(),Da.getMinutes(),Da);
		
		ca.setOuttime(T);
	
		ca.setPrice(getprice(ca));
		return  ca;
	}

	@Override
	public boolean Find(String carnumb) {
		int sort=-1;
		for(int i=0;i<carlist.size();i++) {
			if(carlist.get(i).getCardnum().equals(carnumb)) {
				sort=i;
				break;
			}
		}
		if(sort==-1) {
			return false;
		}
		else {
			return true;
		}
	}

	public  double getprice(Car c) {
		double  dy=c.getOuttime().getYear()-c.getIntime().getYear();
		double  dm=c.getOuttime().getMonth()-c.getIntime().getMonth();
		double  dd=c.getOuttime().getDay()-c.getIntime().getDay();
		double  dh=c.getOuttime().getHour()-c.getIntime().getHour();
		double  dmi=c.getOuttime().getMinute()-c.getIntime().getMinute();
		Date  date1=c.getIntime().getDate();
		int a1=c.getIntime().getYear();
		int b1=c.getIntime().getMonth();
		int c1=c.getIntime().getDay();
		int d1=getdaycount(a1,b1,c1);
		int a2=c.getOuttime().getYear();
		int b2=c.getOuttime().getMonth();
		int c2=c.getOuttime().getDay();
		int d2=getdaycount(a2,b2,c2);
		if(dy==0) {
		if((d2-d1)==0) {
			if(dh==0) {
				if(dmi<=15) {
					return 0;
				}
				else {
					return 3;
				}
			}
			else if(dh==1) {
					if(60-c.getIntime().getMinute()+c.getOuttime().getMinute()<=15) {
						return 0;
				}
					else if(c.getIntime().getMinute()>c.getOuttime().getMinute()){
						return  3;
					}
					else {
						return 6;
					}
			}
			else {
				if(c.getIntime().getMinute()>c.getOuttime().getMinute()) {
					return  3*dh;
				}
				else {
					return  3*(dh+1);
				}
			}
			
			
			
		}
		else if((d2-d1)==1) {
			if(dh>0) {
				return 30+3*12;//停车超过1天，每天30
			}
			else {
				return  (12-c.getIntime().getHour())*3+c.getOuttime().getHour()*3;
			}
		}
		else {
			if(dh>0) {
				return 30*(d2-d1+1);
			}
			else {
				return 30*(d2-d1);
			}
		}
		}
		
		else if(dy==1) {
			if(d1>d2) {
				return 36+30*(d2+365-d1);//第一天的36加上之后的每天30
			}
			else {
				return 30*(365+d2-d1);
			}
		}
		else {
			if(d1>d2) {
				return 365*dy*30;
			}
			else {
				return 365*dy*30+30*(d2-d1);
			}
		}
	}
	public  int getdaycount(int a,int b,int c) {
         int d=0;
		
		int[]array1= {31,29,31,30,31,30,31,31,30,31,30,31};
		int[]array2= {31,28,31,30,31,30,31,31,30,31,30,31};
	   if(a%4==0&&a%100!=0||a%400==0) {
		   for(int i=0;i<(b-1);i++) {
			   d+=array1[i];
		   }
		   d+=c;
	   }
	   else {
		   for(int i=0;i<(b-1);i++) {
			   d+=array2[i];
		   }
		   d+=c;
	   }
	   return d;
	}
	
}
